


#include "mediacodec_video_decoder.h"
#include "AVBuffer.h"

namespace mydecoder {



MediacodecVideoDecoder::MediacodecVideoDecoder()
{

}

MediacodecVideoDecoder::~MediacodecVideoDecoder()
{

}

VideoCodecError MediacodecVideoDecoder::init(const AVBuffer *buffer)
{
    if (buffer == nullptr) {
        return CodecErrorParam;
    }

    setHardwareContext(buffer->hardwareContext);

    return CodecErrorNone;
}

VideoCodecError MediacodecVideoDecoder::initMediaFormat()
{
    m_mediaFormat = AMediaFormat_new();

    // AMediaFormat_setBuffer(m_mediaFormat, "csd-0", );

    if (m_codecInfo->codecName == H264) {
        AMediaFormat_setString(m_mediaFormat, AMEDIAFORMAT_KEY_MIME, "video/avc");
    } else if (m_codecInfo->codecName == H265) {
        AMediaFormat_setString(m_mediaFormat, AMEDIAFORMAT_KEY_MIME, "video/hevc");
    }

    // AMediaFormat_setInt32(m_mediaFormat, "rotation-degrees", rotateDegree);
    AMediaFormat_setInt32(m_mediaFormat, AMEDIAFORMAT_KEY_WIDTH, width);
    AMediaFormat_setInt32(m_mediaFormat, AMEDIAFORMAT_KEY_HEIGHT, height);
    AMediaFormat_setInt32(m_mediaFormat, AMEDIAFORMAT_KEY_MAX_INPUT_SIZE, 0);

    return CodecErrorNone;
}

void MediacodecVideoDecoder::releaseMediaformat()
{
    if (m_mediaFormat != nullptr) {
        AMediaFormat_delete(m_mediaFormat);
    }
}



VideoCodecError MediacodecVideoDecoder::initMediaCodec()
{
    if (m_codecInfo->codecName == H264) {
        m_mediaCodec = AMediaCodec_createDecoderByType("video/avc");
    } else if (m_codecInfo->codecName == H265) {
        m_mediaCodec = AMediaCodec_createDecoderByType("video/hevc");
    }

    if (m_mediaCodec == nullptr) {
        return CodecErrorInit;
    }

    media_status_t status = AMediaCodec_configure(m_mediaCodec, );
}

void MediacodecVideoDecoder::releaseMediaCodec()
{
    if (m_mediaCodec == nullptr) {
        return CodecErrorInit;
    }

    if (isStart) {
        media_status_t ret = AMediaCodec_stop(m_mediaCodec);
        if (ret < 0) {
            AV_LOGE();
        }
    }

    AMediaCodec_delete(m_mediaCodec);
}









}